package gioco;

import java.awt.event.KeyEvent;
import java.util.Iterator;
import java.util.LinkedList;

import controllori.Controllore;
import controllori.ControllorePcMouse;
import controllori.ControllorePcSenzaMouse;
import elementi.giocatori.Giocatore;

public class GestoreControllori  {

	LinkedList<Controllore> controllori;
	LinkedList <ControllorePcMouse> controlloriPcMouse;
	LinkedList <ControllorePcSenzaMouse> ControlloriPcSenzaMouse;
	
	private static final int [] vettoreTasti1 = {KeyEvent.VK_D, KeyEvent.VK_A, KeyEvent.VK_W, KeyEvent.VK_S, KeyEvent.VK_F, KeyEvent.VK_CONTROL, KeyEvent.VK_SPACE, KeyEvent.VK_C, KeyEvent.VK_V};
	private static final int [] vettoreTasti2 = {KeyEvent.VK_RIGHT, KeyEvent.VK_LEFT, KeyEvent.VK_UP, KeyEvent.VK_DOWN, KeyEvent.VK_ENTER, KeyEvent.VK_ALT_GRAPH, KeyEvent.VK_SHIFT, KeyEvent.VK_N, KeyEvent.VK_M};
	
	public GestoreControllori() {
		super();
		this.controllori = new LinkedList <Controllore> ();
		this.controlloriPcMouse = new LinkedList <ControllorePcMouse> ();
		this.ControlloriPcSenzaMouse = new LinkedList <ControllorePcSenzaMouse> ();
	}

	
//Se il giocatore da Pc � singolo, il giocatore � controllabile tramite tastiera o mouse;
// se i giocatori sono due, entrambi giocano da tastiera, usando diversi tasti (vedi ControllorePcSenzaMouse).
	
	public void aggiungiControllori (int [] tipoGiocatore, LinkedList<Giocatore> giocatori) throws GiocatoriDaPcException {
		
		
		if (tipoGiocatore[0]==1) {
			ControllorePcMouse temp = new ControllorePcMouse (giocatori.get(0), vettoreTasti2);
			controlloriPcMouse.add(temp);
			controllori.add(temp);
		}
		else if (tipoGiocatore[0]==2) {
			ControllorePcSenzaMouse temp1 = new ControllorePcSenzaMouse (giocatori.get(0), vettoreTasti1);
			ControlloriPcSenzaMouse.add(temp1);
			controllori.add(temp1);
			ControllorePcSenzaMouse temp2 = new ControllorePcSenzaMouse (giocatori.get(1), vettoreTasti2);
			ControlloriPcSenzaMouse.add(temp2);
			controllori.add(temp2);
			
			
		} else {
			throw new GiocatoriDaPcException();
		}
	}
	
	
	public LinkedList<Controllore> getControllori() {
		return controllori;
	}

	public LinkedList<ControllorePcMouse> getControlloriPcMouse() {
		return controlloriPcMouse;
	}
	
	public LinkedList<ControllorePcSenzaMouse> getControlloriPcSenzaMouse() {
		return ControlloriPcSenzaMouse;
	}
	
	public void rimuoviControllore (Giocatore giocatore) {
	
		Iterator<Controllore> itco = controllori.iterator();
		while(itco.hasNext()){
			Controllore cit = itco.next();
			if (cit.getGiocatore() == giocatore) {
				controllori.remove(cit);
			}
		}
	}
}
